package goods.api;

import cart.api.vo.FashionIdAndCountVo;
import goods.model.GoodsFashion;
import goods.model.Product;
import goods.model.ProductFashion;
import store.model.core.Store;

import java.util.List;
import java.util.Map;

/**
 * Created by Liang Wenxu on 2016/10/28.
 */
public interface ProductFashionApi {
    /**
     * 按ID获取商品规格信息
     * @param id
     * @return
     */
    public ProductFashion findById(String id);

    public List<ProductFashion> findByProduct(Product product);

    /**
     * 获取指定产品规格的库存（获取京东等第三方平台实时库存）
     * @param fashionIds 产品规格ID
     * @param areaCode 地区代码
     * @return
     */
    public Map<String, Object> getStockCounts(List<String> fashionIds, String areaCode);

    public ProductFashion findOne(String id);

    public void saveFashion(ProductFashion productFashion);

//    /**
//     * 获取产品规格的实时状态，主要针对第三方平台商品
//     * @param fashionStatusRequetVo 查询请求数据VO
//     * @param store 店铺
//     * @return List<Map<String, Object>>， 返回结果集示意：
//     *  [
//     *      [id: '12312312323', stockCount: 1, isAreaRestrict: false, saleState: true]
//     *      ...
//     *      [id: '12312312322', stockCount: 10, isAreaRestrict: false, saleState: true]
//     *  ]
//     *
//     *  参数：
//     *      stockCount: 实时库存数量，
//     *      isAreaRestrict: 该商品是否地区限购，true: 该地区限制购买， false: 该地区不限制购买
//     *      saleState: 销售状态，true: 可销售，false: 不可销售
//     */
//    public List<Map<String, Object>> getFashionStatus(outsideapi.vo.FashionStatusRequetVo fashionStatusRequetVo, Store store);

    /**
     * 更新规格的库存及销售状态
     * @param fashionStatusRequetVo
     * @param store
     * @return
     */
    public List<ProductFashion> refreshFactionStatus(outsideapi.vo.FashionStatusRequetVo fashionStatusRequetVo, Store store);

    public String toString();

    /**
     * 按id列表查找productFashion
     * @param ids
     * @return
     */
    public List<ProductFashion> findByIds(List<String> ids);

    /**
     * 查询产品规格的库存
     * @param fashionIdAndCountVoList 产品规格及购买数量Vo列表
     * @return 返回Map: {
     *                      status: 状态
     *                      data: [
     *                              noStockFlag: 包含无库存商品标识，true: 包含有无库存商品 | false: 不包含无库存商品
     *                              details: ArrayList<Map> -> [
     *                              {fashionId: "1111", onSale: true|false, stockCount: int}
     *                              ]  // 详细数据
     *                          ] // 返回数据
     *                      }
     */
    public Map queryFashionStockStatus(List<FashionIdAndCountVo> fashionIdAndCountVoList, String areaCode);
}
